# @Time : 2024/10/27 21:45
# @Author : Fioman 
# @Phone : 13149920693

"""
作用域: LEGB
Local (函数内局部作用域)L
Enclosing 嵌套函数外部嵌套函数作用域 E
Global  全局作用域 G
Builtin  模块内内置函数作用域
"""


def func(a, b):
    localVal = 10
    print(a, b, localVal)  # a,b localVal 都是局部变量


func(1, 2)


def outter(a, b):
    enclosingVal = 10
    enclosingVal2 = -10
    print(a, b, enclosingVal)  # 外部嵌套函数作用域变量

    def inner(c, d):
        nonlocal enclosingVal
        localVal = 100
        print(c, d, localVal)
        # 内层函数可以直接访问外部作用域的变量,但是如果要修改,修妖使用nonlocal关键字
        print("访问外部函数作用域变量: {},{}".format(a, b))
        enclosingVal = 1000
        print(f"外部变量修改之后的值为: {enclosingVal}")
        print(f"直接访问外部变量的值: {enclosingVal2}")

    return inner


inner = outter(1, 2)
inner(3, 4)

globalVal = "Fioman"  # 全局变量


def func_global():
    print("可以直接访问全局变量: {}".format(globalVal))


func_global()


# 如果要在局部作用域中修改全局变量的值,需要使用global关键字声明
def func2():
    global globalVal
    globalVal = "Hammer"
    print("修改全局变量: {}".format(globalVal))


func2()
